1

maven是一个项目自动化管理与构建工具,简单地来说,我拿它干两件事:

  • 做本地的jar包管理

  • 用来打包

至于打成jar包还是zip包,可以在pom.xml文件中指定。

pom文件

在eclipse中安装maven插件后,新建maven工程,可以发现在根目录下有一个pom.xml。pom文件是整个项目的核心,可以添加远程仓库地址:

  <repositories>
    <repository>
        <id>maven repo</id>
        <url>http://mvnrepository.com/artifact/</url>
    </repository>
</repositories>

我一般是用mvnrepository作为中央repository。

也可以指定项目build时encoding方式为UTF-8,在本地下载jar包时同时下载source、javaDoc的jar包:

 <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <downloadSources>true</downloadSources>
      <downloadJavadocs>true</downloadJavadocs>
  </properties>

可以添加jar包依赖:

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-core</artifactId>
        <version>1.2.1</version>
    </dependency>
  </dependencies>

可以指定项目build方式:

    <build>        
        <plugins>
            <plugin>
                      <groupId>org.apache.maven.plugins</groupId>
                      <artifactId>maven-source-plugin</artifactId>
                      <executions>
                        <execution>
                              <id>attach-sources</id>
                              <goals>
                                <goal>jar</goal>
                              </goals>
                        </execution>
                      </executions>
            </plugin>
            
        </plugins>
   </build>

上面的build方式为在项目打包时,同时也会打sourcejar包。我平时常用build方式都会采用assembly,会打一个纯项目包与with-dependencies的包(即加上了所有的包依赖))。

maven命令

maven提供了丰富的插件,可以用如下的命令执行:

mvn <plugin-name>:<goal-name>

比如mvn eclipse:eclipse,表示使用maven-eclipse-plugin的eclipse-goal生成eclipse项目。

下载source与javadoc

下载依赖包的source与javadoc,有两种方法:

方法一
可输入下面两条命令,参看这里

mvn dependency:sources
mvn dependency:resolve -Dclassifier=javadoc

方法二

在pom中添加

   <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-eclipse-plugin</artifactId>
                <configuration>
                    <downloadSources>true</downloadSources>
                    <downloadJavadocs>true</downloadJavadocs>
                </configuration>
            </plugin>
        </plugins>
    </build>

然后输入mvn eclipse:eclipse,即可。

setting文件

除了在pom.xml可以指定中央repository的URL地址,其次也可以在settting.xml指定中央repo的镜像地址,比如这样:

  <mirrors>
    <mirror>
      <id>internal-repository</id>
      <name>Maven Repository Manager</name>
      <url>http://repo.mycompany.com/proxy</url>
      <mirrorOf>*</mirrorOf>
    </mirror>
  </mirrors>

注意:setting.xml要放在~/.m2/目录下。

oschina提供maven镜像,再也不用担心下载慢的问题了。

    <mirror>
      <id>nexus-osc</id>
      <mirrorOf>*</mirrorOf>
      <name>Nexus osc</name>
      <url>http://maven.oschina.net/content/groups/public/</url>
    </mirror>

    <mirror>
      <id>nexus-osc</id>
      <mirrorOf>central</mirrorOf>
      <name>Nexus osc</name>
      <url>http://maven.oschina.net/content/groups/public/</url>
    </mirror>
    <mirror>
      <id>nexus-osc-thirdparty</id>
      <mirrorOf>thirdparty</mirrorOf>
      <name>Nexus osc thirdparty</name>
      <url>http://maven.oschina.net/content/repositories/thirdparty/</url>
    </mirror>
    
<profile>
<id>jdk-1.4</id>

    <activation>
        <jdk>1.4</jdk>
    </activation>

    <repositories>
        <repository>
            <id>nexus</id>
            <name>local private nexus</name>
            <url>http://maven.oschina.net/content/groups/public/</url>
            <releases>
                <enabled>true</enabled>
            </releases>

            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>

    <pluginRepositories>
        <pluginRepository>
            <id>nexus</id>
            <name>local private nexus</name>
            <url>http://maven.oschina.net/content/groups/public/</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </pluginRepository>
    </pluginRepositories>
  </profile>

lifehack
134 声望6 粉丝